#include "MonsterHandler.h"

#include <iostream>
#include <vector>
#include <stdexcept>
#include <gtkmm/box.h>
#include <gtkmm/widget.h>
#include <gtkmm/menubar.h>
#include <gtkmm/menuitem.h>


MonsterHandler::MonsterHandler(Glib::RefPtr<Gtk::Builder> b, Configuraciones** config){
	// Obtiene la barra de menues y al notebook
	Gtk::MenuBar* mb = 0;
	b->get_widget("barraMenu", mb);

	this->_pTabNav = 0;
	b->get_widget("contentArea", this->_pTabNav);

	if (!mb) throw std::runtime_error("No se encontró la barra de menú");
	if (!this->_pTabNav) throw std::runtime_error("No se encontró la content area");

	// Conecta un signal a cada uno de los submenues
	std::vector<Gtk::Widget*> vw = mb->get_children();
	std::vector<Gtk::Widget*>::iterator it;
	for (it = vw.begin(); it != vw.end(); it++){
		Gtk::MenuItem* mi = static_cast<Gtk::MenuItem*>( *it );
		mi->signal_activate().connect( sigc::mem_fun(*this, &MonsterHandler::manejadorPantalla) );
	}

	// Obtiene los numeros de paginas de las distintas imagenes
	Gtk::Box* bMain = 0;
	Gtk::Box* bMonster = 0;
	b->get_widget("boxMain", bMain);
	b->get_widget("boxMonster", bMonster);

	this->_pagLogo = 0;
	this->_pagMonster = 1;

	if (bMain) this->_pagLogo = this->_pTabNav->page_num(*bMain);
	if (bMonster) this->_pagMonster = this->_pTabNav->page_num(*bMonster);

	// Guarga la referencia a las configuraciones 
	this->_ppConfig = config;
}


MonsterHandler::~MonsterHandler(){
}


void MonsterHandler::manejadorPantalla(){
	// Si no esta cargada la configuracion no hace nada
	if (*this->_ppConfig == NULL) return;

	int nuevaPag = 0;
	int pagActual = this->_pTabNav->get_current_page();

	if ( (*this->_ppConfig)->modoZilla )
		nuevaPag = this->_pagMonster;
	else
		nuevaPag = this->_pagLogo;

	// Cambia de pagina, si es necesario
	if ( nuevaPag != pagActual ) this->_pTabNav->set_current_page(nuevaPag);
}


